import { Toast } from 'vant'
import { service, request } from '@/utils/request'
import { URL_link } from '@/constant//url.js'
import store from '@/store'
export const PUBLIC = {
	// 将 Date 转化为指定格式的String
	// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
	// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
	// 例子：
	// dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
	// dateFormat(new Date(), "yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
	//author: meizz
	dateFormat(date, fmt) {
		if(!date) return ''
		var d = typeof date === 'number' || typeof date === 'string' ? new Date(date) : date
		if (!fmt) {
			fmt = "yyyy-MM-dd HH:mm:ss"
		}
		var o = {
			"M+": d.getMonth() + 1, //月份
			"d+": d.getDate(), //日
			"h+": d.getHours() % 12 == 0 ? 12 : d.getHours() % 12, //小时
			"H+": d.getHours(), //小时
			"m+": d.getMinutes(), //分
			"s+": d.getSeconds(), //秒
			"q+": Math.floor((d.getMonth() + 3) / 3), //季度
			S: d.getMilliseconds(), //毫秒
		}
		if (/(y+)/.test(fmt))
			fmt = fmt.replace(
				RegExp.$1,
				(d.getFullYear() + "").substr(4 - RegExp.$1.length)
			)
		for (var k in o)
			if (new RegExp("(" + k + ")").test(fmt))
				fmt = fmt.replace(
					RegExp.$1,
					RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
				)
		return fmt
	},
	/**
 * 提示信息
 */
	message(huiObj,type, msg) {
		if(type === 'success') {
			Toast.success(msg)
		} else {
			Toast.fail(msg)
		}
	},
	// 防抖
	debounce(fn, delay = 100) {
		let timer;
		return function () {
			clearTimeout(timer);
			timer = setTimeout(() => {
				try {
					fn.apply(this, arguments);
				} catch (e) {
					console.error("debouce error:", e);
				}
			}, delay);
		};
	},
	// 节流
	throttle(func, delay,timer) {
		if (!timer) {
			timer = setTimeout(() => {
				func();
				timer = null;
			}, delay);
		}
	},
	// 获取url中的某个参数
	getParamFromURL(url, paramName) {
		const param = url.split('?')[1] // 获取URL中'?'后面的部分
		const urlParams = param?param.split('#').shift():'' // 去掉URL中'?'后面#号后面部分

		if (!urlParams) return null // 如果没有查询参数，则返回null

		const paramsArray = urlParams.split('&') // 将参数字符串按'&'分割成数组
		for (let i = 0; i < paramsArray.length; i++) {
			const param = paramsArray[i].split('=') // 再将每个键值对按'='分割
			if (decodeURIComponent(param[0]) === paramName) {
				// 检查是否为所需参数名
				return decodeURIComponent(param[1]) // 返回对应的参数值（已解码）
			}
		}
		return null // 如果未找到参数，则返回null
	},
	// 判断是否是微信环境
	isWx() {
		return String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger"
	},
	// 判断是否是小程序环境
	isWxMiniProgram() {
		return (
			String(navigator.userAgent.toLowerCase().match(/miniprogram/i)) === "miniprogram"
		)
	},
	// 清除用户登录信息
	clearUserInfo() {
		localStorage.removeItem('cloudToken')
		localStorage.removeItem('cloudUserInfo')
	},
	/**
   * 确定值是否为对象
   *
   * @param {Object} obj 传入的对象
   * @returns {String} 返回类型
   */
  getObjClass(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
  },
	/**
   * 深度克隆
   *
   * @param {Object} obj 传入需要克隆的对象
   * @returns {Object} 返回克隆好的对象
   */
  deepClone(obj) {
    let result;
    let objClass = PUBLIC.getObjClass(obj);
    if (objClass === "Object") {
      result = {};
    } else if (objClass === "Array") {
      result = [];
    } else {
      return obj; // 如果是其他数据类型不复制，直接将数据返回
    }
    // 遍历目标对象
    for (let key in obj) {
      let value = obj[key];
      result[key] = PUBLIC.deepClone(value);
    }
    return result;
  },
	// 获取环境
	getEnv() {
		return localStorage.getItem('cloudSignEnv')
	}
}
